package practice4;

import java.util.Scanner;

public class P2676 {

    static int mod = 1000000007;

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int[] list = new int[n+1];
        for(int i=1;i<=n;i++){
            list[i]=sc.nextInt();
        }
        int dp[]=new int[n+1]; //dp[i]表示前i个数能切分的个数
        dp[0]=1;
        for(int i=1;i<=n;i++){
            int max=list[i];
            int min=list[i];
            //j倒回去
            for(int j=i;j>=1;j--){
                max=Math.max(max,list[j]);
                min=Math.min(min,list[j]);
                //求出从j到i的最大值与最小值
                if(max-min == i-j){
                    //若最大值与最小值之差 == 子数组下标之差,说明从j到i可以构成一个新的子数组
                    //前j-1个元素共有dp[j-1]种分法,因此基于这个新生成的子数组可新增dp[j-1]种分法
                    dp[i]=(dp[i]+dp[j-1])%mod;
                }
            }
        }
        System.out.println(dp[n]);
    }
}
